package leetcode.d04;

import org.junit.Test;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。
 * 请你找出并返回这两个正序数组的 中位数 。
 */
public class Solution {


    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double avgValue1 = findAvgNum(nums1);
        double avgValue2 = findAvgNum(nums2);
        if( nums1.length == 0){
            return avgValue2;
        }else if( nums2.length == 0 ){
            return avgValue1;
        }else{
            return divisionNum(avgValue1+avgValue2,2);
        }
    }

    /**
     * 除法
     */
    public double findAvgNum(int[] nums){
        int middleIndex = nums.length%2==0?nums.length/2-1:nums.length/2;
        int otherMiddleIndex = nums.length-1-middleIndex;
        if( nums.length == 0 ){
            return divisionNum(0,2);
        }else if( nums.length == 1 ){
            return divisionNum(nums[0]+nums[0],2);
        }else {
            return divisionNum(nums[middleIndex]+nums[otherMiddleIndex],2);
        }
    }

    /**
     * 除法
     */
    public double divisionNum(int num1, int num2){
        java.math.BigDecimal num3 = new java.math.BigDecimal(num1).divide(new java.math.BigDecimal(num2));
        return num3.setScale(4,java.math.BigDecimal.ROUND_DOWN).doubleValue();
    }

    /**
     * 除法
     */
    public double divisionNum(double num1,int num2){
        java.math.BigDecimal num3 = new java.math.BigDecimal(num1+"").divide(new java.math.BigDecimal(num2+""));
        return num3.setScale(4,java.math.BigDecimal.ROUND_DOWN).doubleValue();
    }

    public double formatNum(double num){
        DecimalFormat format = new DecimalFormat("0.0000");
        return Double.parseDouble(format.format(num) + "");
    }

    @Test
    public void findMedianSortedArraysTest(){
        int[] num1 = {1,2};
        int[] num2 = {3,4};
        System.out.println(findMedianSortedArrays(num1,num2));
    }

    @Test
    public void setScaleTest(){
        BigDecimal value = new BigDecimal("123.1231231321");
        System.out.println(value.setScale(4,BigDecimal.ROUND_DOWN).doubleValue());
    }

    @Test
    public void formatNumTest(){
        System.out.println(formatNum(2.0000));
    }

}